////////////////////////////////////////////// USO

Solo se instala y se activa el plugin

Hay 3 shortcodes:
[chat from="X" to "Y"] que se usa para iniciar conversaciones entre 2 usuarios
[report from="x" to="y" post="z"] se usa para que un usuario reporte a otro, solo hace echo de un boton
[chatlist user="X"] que lista todas las conversaciones de ese usuario, por si quiere retomar
[chatadmin] lista las conversaciones de todos por si el admin quiere auditar e intervenir

Puedes poner la clase .angosto en un div padre del shortcode si quieres forzar a que use el look movil 
(por ejemplo si usaste en un column el shortcode y se encima el boton de send con el attachment y el textarea)

Si tienes que cambiar los estilos de los chats, solo editas el CSS en styles.php, 
ya deje comentarios que es cada cosa y la jerarquia identada de como es el html

/////////////////////////////////////////////// Funcionamiento y ajustes

El plugin cuando se instala crea una tabla en la bdd para guardar los mensajes llamada XX_simple_chats
y crea una carpeta en raiz del wp donde se van a guardar todos los archivos llamada /chat-attachments
junto con un htaccess para que se pueda descargar los archivos en automático en web-view-react y navegador normal.

chat.php es el archivo base del plugin que se usa en la instalacion
Separe los shortcodes en archivos shortcode-chat, -chatlist y -chatadmin respectivamente para estar ordenado
chatlist y chatadmin usan a su vez a chat en el codigo

Todos los estilos están en styles.php, ya deje comentarios que es cada cosa y la jerarquia identada de como es el html

/////////////////////////////////////////////// Como usar con CJT:

========== Creas un bloque CJT en la página donde los usuarios envian mensajes nuevos, por ejemplo aquí siempre es del loggeado al autor de la pag o post o cpt:

<?php
// solo loggeados
if (is_user_logged_in()) {

    // usuario actual
    $uid = get_current_user_id();

    // obtener author del contenido actual
    $post_id = get_queried_object_id();
    $upost   = intval(get_post_field("post_author", $post_id));

    // si no hay author, no hacer nada
    if ($upost <= 0) {
        echo "<h1>Error:<br><br>This post has no author to talk to</h1>";
        return;
    }

    // evitar chat consigo mismo
    if ($uid == $upost) {
        echo "<h1>Error:<br><br>This post is yours & you can't start a chat with your own self</h1>";
        return;
    }

    // Exito: mostrar chat 1:1
    $uobj  = get_userdata($upost);              // obtener objeto WP_User
    $uname = $uobj ? $uobj->display_name : ("User " . $upost); // fallback simple
    echo "<h3>Chat with " . esc_html($uname) . "</h3>"; // mostrar encabezado
    echo do_shortcode("[chat from=\"".$uid."\" to=\"".$upost."\"]");

    echo do_shortcode("[report from=\"".$uid."\" to=\"".$upost."\"]");
    
}else{
    echo "<h1>Please login first to contact the owner of this property.</h1>";
}
?>


========== Creas un bloque CJT en la página donde los usuarios leen sus mensajes si están loggeados, ya sean mortales o admins como este:

<?php
// mostrar shortcode según rol (admin => [chatadmin], usuario => [chatlist user="ID"])
if (is_user_logged_in()) {

    // obtener ID del usuario actual
    $uid = get_current_user_id();

    if (current_user_can("manage_options")) {
        // si es admin, mostrar panel de administración del chat
        echo do_shortcode("[chatadmin]");
    } else {
        // si no es admin, mostrar su lista de chats
        echo do_shortcode("[chatlist user=\"".$uid."\"]");
    }

} elseif (!isset($_GET["elementor-preview"])) { // si no está en el editor de Elementor
    // no logueado y fuera del editor → redirigir a /login
    echo "<script>window.location.replace(\"/login\");</script>";
}
?>